package leetcode009;

/**
 * 回文数
 * https://leetcode.cn/problems/palindrome-number/
 * 给你一个整数 x ，如果 x 是一个回文整数，返回 true ；否则，返回 false 。
 *
 * 回文数
 * 是指正序（从左向右）和倒序（从右向左）读都是一样的整数。
 *
 * 例如，121 是回文，而 123 不是。
 */
public class Study009 {
    public boolean isPalindrome(int x) {
        String str = Integer.toString(x);
        //奇数 9/2=4，偶数10/2=5
        for (int i = 0; i < str.length() / 2; i++) {
            if (str.charAt(i) != str.charAt( str.length() - 1 - i)) {
                return false;
            }
        }
        return true;
    }

    /**
     * 不转成String
     * @param x
     * @return
     */
    public boolean isPalindrome2(int x) {
        if (x < 0){
            return false;
        }
        //最大位数
        int digitCount = (int) (Math.log10(x) + 1);
        //奇数 3/2=1, 5/2=2; 偶数4/2=2
        for ( int i = 1; i <= digitCount / 2; i++) {
            int right = (int)(x/Math.pow(10, i -1)) % 10;
            int left = (int)(x/ Math.pow(10, digitCount - i)) % 10;
            if (left != right) {
                return false;
            }
        }
        return true;
    }

    /**
     * 不用String，构造一个逆向的整数
     * @param x
     * @return
     */
    public boolean isPalindrome3(int x) {
        if (x < 0){
            return false;
        }
        int i = x; int y = 0;
        while(i > 0){
            y = y * 10 + i % 10;
            i = i / 10;
        }
        return x == y;
    }
}
